package com.example.shangguigu.ascii;

/**
 * @DESCRIPTION:
 * @USER: shg
 * @DATE: 2023/2/22 15:06
 */
public class AsciiDemo {

    public static void main(String[] args) {
        test1('A');
        System.out.println("------");

        test2();
        System.out.println("------");

        test3(128);
        System.out.println("------");

        test4();
        System.out.println("\n------");
        test4_1();
    }

    /**
     * 在控制台打印128个ascii字符，其中有33个(第0~31 和 第127个字符)是不可打印的，有95个字符(第32~126个)是可打印的
     */
    private static void test4() {
        for(int i = 0;i<128;i++){
            char c = (char) i;
            System.out.print(c+"\t");
        }
    }

    /**
     * 在控制台打印128个ascii字符，其中有33个(第0~31 和 第127个字符)是不可打印的，有95个字符(第32~126个)是可打印的
     * 不可打印的ascii字符用十进制数字显示
     *
     *
     * 0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	31	 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~	127
     *
     */
    private static void test4_1() {
        for(int i = 0;i<128;i++){
            char c = (char) i;
            if(i<32 || i> 126){
                System.out.print(i+"\t");
            }else {
                System.out.print(c+"\t");
            }
        }
    }

    // 给定一个整数，打印其对应的ascii码【现在的疑问是：我知道ascii码的字符集一共有128个，其中第0~31和第127个是不可打印字符，第32~126是可打印字符，但是如果我输入的整数大于127，会打印什么呢】
    // TODO
    private static void test3(int x){
        char c = (char) x;
        System.out.println(c);
    }

    /**
     * 输出字符串中每个字符对应的ASCII码和二进制
     */
    private static void test2() {
        String a = "AaZ";
        char[] chars = a.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            test1(chars[i]);
        }
    }

    /**
     * 输出字符对应的ASCII码和二进制表现形式
     *
     * @param c
     */
    public static void test1(char c) {
        System.out.println(c + "的字符表现形式：" + c);

        int b = c;
        System.out.println(c + "的ASCII表现形式：" + b);

        String binaryString = Integer.toBinaryString(b);
        System.out.println(c + "的二进制表现形式：" + binaryString);
    }
}
